package com.bfly.mall.wechat.minipro.dto;

import java.io.Serializable;
import java.util.List;

/**
 * 微信预订单实体类
 *
 * @author 长沙商脉科技有限公司
 * @2015年4月28日下午4:03:22
 */
public class WeChatOrder implements Serializable {

    /**
     * @author 长沙商脉科技有限公司
     * @2015年4月28日下午4:04:20
     */
    private static final long serialVersionUID = -4931086863512131537L;

    /**
     * 公众号ID:直连商户申请的公众号或移动应用appid ,string[1,32] 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 17:59
     */
    private String appid;

    /**
     * 直连商户号	:直连商户的商户号，由微信支付生成并下发, string[1,32] 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 17:59
     */
    private String mchid;

    /**
     * 商品描述:商品描述 string[1,127] 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:00
     */
    private String description;

    /**
     * 商户订单号:商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一, string[6,32] 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:01
     */
    private String out_trade_no;

    /**
     * 交易结束时间:订单失效时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，
     * YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，
     * TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。
     * 例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
     * string[1,64]
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:04
     */
    private String time_expire;

    /**
     * 附加数据:在查询API和支付通知中原样返回，可作为自定义参数使用 string[1,128]
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:06
     */
    private String attach;

    /**
     * 通知地址:通知URL必须为直接可访问的URL，不允许携带查询串。 string[1,256] 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:06
     */
    private String notify_url;

    /**
     * 订单优惠标记 string[1,32]
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:07
     */
    private String goods_tag;

    /**
     * 订单金额 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:51
     * @see Amount
     */
    private Amount amount;

    /**
     * 支付者信息 必填
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:22
     */
    private Payer payer;

    /**
     * 优惠功能
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:23
     */
    private Detail detail;

    /**
     * 支付场景描述
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:29
     */
    private sceneInfo scene_info;

    /**
     * 场景信息
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:30
     */
    public class sceneInfo {
        /**
         * 调用微信支付API的机器IP，支持IPv4和IPv6两种格式的IP地址。string[1,45]	必填
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:31
         */
        private String payer_client_ip;
        /**
         * 商户端设备号（门店号或收银设备ID）string[1,32]
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:31
         */
        private String device_id;

        /**
         * 商户门店信息
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:32
         */
        private StoreInfo store_info;

        public String getPayer_client_ip() {
            return payer_client_ip;
        }

        public void setPayer_client_ip(String payer_client_ip) {
            this.payer_client_ip = payer_client_ip;
        }

        public String getDevice_id() {
            return device_id;
        }

        public void setDevice_id(String device_id) {
            this.device_id = device_id;
        }

        public StoreInfo getStore_info() {
            return store_info;
        }

        public void setStore_info(StoreInfo store_info) {
            this.store_info = store_info;
        }

        /**
         * 商户门店信息
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:32
         */
        public class StoreInfo {
            /**
             * 商户侧门店编号 string[1,32] 是
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:33
             */
            private String id;
            /**
             * 商户侧门店名称 string[1,256]
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:33
             */
            private String name;
            /**
             * 地区编码 string[1,32]
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:33
             */
            private String area_code;

            /**
             * 详细的商户门店地址 string[1,512]
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:34
             */
            private String address;

            public String getId() {
                return id;
            }

            public void setId(String id) {
                this.id = id;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getArea_code() {
                return area_code;
            }

            public void setArea_code(String area_code) {
                this.area_code = area_code;
            }

            public String getAddress() {
                return address;
            }

            public void setAddress(String address) {
                this.address = address;
            }
        }
    }

    /**
     * 优惠功能
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:24
     */
    public class Detail {
        /**
         * 订单原价:	1、商户侧一张小票订单可能被分多次支付，订单原价用于记录整张小票的交易金额。
         * 2、当订单原价与支付金额不相等，则不享受优惠。
         * 3、该字段主要用于防止同一张小票分多次支付，以享受多次优惠的情况，正常支付订单不必上传此参数。
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:24
         */
        private int cost_price;

        /**
         * 商品小票ID string[1,32]
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:25
         */
        private String invoice_id;

        /**
         * 单品列表:单品列表信息条目个数限制：【1，undefined】
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:26
         */
        private List<GoodsDetail> goods_detail;

        public int getCost_price() {
            return cost_price;
        }

        public void setCost_price(int cost_price) {
            this.cost_price = cost_price;
        }

        public String getInvoice_id() {
            return invoice_id;
        }

        public void setInvoice_id(String invoice_id) {
            this.invoice_id = invoice_id;
        }

        public List<GoodsDetail> getGoods_detail() {
            return goods_detail;
        }

        public void setGoods_detail(List<GoodsDetail> goods_detail) {
            this.goods_detail = goods_detail;
        }

        /**
         * 单品列表
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:27
         */
        public class GoodsDetail {
            /**
             * 商户侧商品编码:由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。string[1,32] 必填
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:27
             */
            private String merchant_goods_id;

            /**
             * 微信侧商品编码:微信支付定义的统一商品编号（没有可不传） string[1,32]
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:28
             */
            private String wechatpay_goods_id;

            /**
             * 商品的实际名称 string[1,256]
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:28
             */
            private String goods_name;

            /**
             * 用户购买的数量 int 必填
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:28
             */
            private int quantity;

            /**
             * 商品单价，单位为分 int 必填
             *
             * @author 长沙商脉科技有限公司
             * @date 2020/11/30 19:29
             */
            private int unit_price;

            public String getMerchant_goods_id() {
                return merchant_goods_id;
            }

            public void setMerchant_goods_id(String merchant_goods_id) {
                this.merchant_goods_id = merchant_goods_id;
            }

            public String getWechatpay_goods_id() {
                return wechatpay_goods_id;
            }

            public void setWechatpay_goods_id(String wechatpay_goods_id) {
                this.wechatpay_goods_id = wechatpay_goods_id;
            }

            public String getGoods_name() {
                return goods_name;
            }

            public void setGoods_name(String goods_name) {
                this.goods_name = goods_name;
            }

            public int getQuantity() {
                return quantity;
            }

            public void setQuantity(int quantity) {
                this.quantity = quantity;
            }

            public int getUnit_price() {
                return unit_price;
            }

            public void setUnit_price(int unit_price) {
                this.unit_price = unit_price;
            }
        }
    }

    /**
     * 支付者
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 19:22
     */
    public class Payer {
        /**
         * 用户标识:用户在直连商户appid下的唯一标识 string[1,128]必填
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 19:23
         */
        private String openid;

        public String getOpenid() {
            return openid;
        }

        public void setOpenid(String openid) {
            this.openid = openid;
        }
    }

    /**
     * 订单金额类
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/11/30 18:51
     */
    public class Amount {
        /**
         * 总金额:订单总金额，单位为分 int 必填
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 18:51
         */
        private int total;

        /**
         * 货币类型:CNY：人民币，境内商户号仅支持人民币 string[1,16]必填
         *
         * @author 长沙商脉科技有限公司
         * @date 2020/11/30 18:52
         */
        private String currency;

        public int getTotal() {
            return total;
        }

        public void setTotal(int total) {
            this.total = total;
        }

        public String getCurrency() {
            return currency;
        }

        public void setCurrency(String currency) {
            this.currency = currency;
        }
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getMchid() {
        return mchid;
    }

    public void setMchid(String mchid) {
        this.mchid = mchid;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getOut_trade_no() {
        return out_trade_no;
    }

    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }

    public String getTime_expire() {
        return time_expire;
    }

    public void setTime_expire(String time_expire) {
        this.time_expire = time_expire;
    }

    public String getAttach() {
        return attach;
    }

    public void setAttach(String attach) {
        this.attach = attach;
    }

    public String getNotify_url() {
        return notify_url;
    }

    public void setNotify_url(String notify_url) {
        this.notify_url = notify_url;
    }

    public String getGoods_tag() {
        return goods_tag;
    }

    public void setGoods_tag(String goods_tag) {
        this.goods_tag = goods_tag;
    }

    public Amount getAmount() {
        return amount;
    }

    public void setAmount(Amount amount) {
        this.amount = amount;
    }

    public Payer getPayer() {
        return payer;
    }

    public void setPayer(Payer payer) {
        this.payer = payer;
    }

    public Detail getDetail() {
        return detail;
    }

    public void setDetail(Detail detail) {
        this.detail = detail;
    }

    public sceneInfo getScene_info() {
        return scene_info;
    }

    public void setScene_info(sceneInfo scene_info) {
        this.scene_info = scene_info;
    }
}
